iT邦幫忙

2022 iThome 鐵人賽

DAY 23
0
Software Development

資料結構 - 我好想懂阿!30 天系列系列 第 23

資料結構 - 我好想懂阿!30 天系列 (23) - OBST (2)

  • 分享至 

  • xImage
  •  

前言

前一篇文章有先提到我們要使用 Dynamic Programming 來找出 OBST,這章節就要告訴大家怎麼來找啦,但在進入怎麼找之前,我們先來了解一些符號,確保我們有共通的語言來看!

你必須要知道的符號

https://chart.googleapis.com/chart?cht=tx&chl=a_%7Bi%2B1%7D......a_%7Bj%7D:為內部節點
https://chart.googleapis.com/chart?cht=tx&chl=p_%7Bi%2B1%7D......p_%7Bj%7D:為內部節點加權值
https://chart.googleapis.com/chart?cht=tx&chl=q_%7Bi%7D%2Cq_%7Bi%2B1%7D......q_%7Bj%7D:外部節點的加權值,這邊要注意,因為外部節點會比內部節點多一顆,所以權值也會多一個
https://chart.googleapis.com/chart?cht=tx&chl=T_%7Bi%2Cj%7D%3Da_%7Bi%2B1%7D......a_%7Bj%7D所構成的OBST,要注意是由 https://chart.googleapis.com/chart?cht=tx&chl=a_%7Bi%2B1%7D node 開始喔
https://chart.googleapis.com/chart?cht=tx&chl=c_%7Bi%2Cj%7D%3Dt_%7Bi%2Cj%7D 的 Cost
https://chart.googleapis.com/chart?cht=tx&chl=w_%7Bi%2Cj%7D%3Dt_%7Bi%2Cj%7D 的加權值總合
https://chart.googleapis.com/chart?cht=tx&chl=r_%7Bi%2Cj%7D%3Dt_%7Bi%2Cj%7D 的root

如何推導 Solution 公式

我們先想想,想要找出總搜尋成本最小的BST,就是要找出由https://chart.googleapis.com/chart?cht=tx&chl=a_%7Bi%2B1%7D......a_%7Bj%7D 組成的BST中最小的Cost
那要怎麼作,我們先來求 Cost,先令 https://chart.googleapis.com/chart?cht=tx&chl=a_k 為此樹的 Root
則左子樹:https://chart.googleapis.com/chart?cht=tx&chl=a_%7Bi%2B1%7D...a_%7Bk-1%7D%3Dt_%7Bi%2Ck-1%7D
右子樹:https://chart.googleapis.com/chart?cht=tx&chl=a_%7Bk%2B1%7D...a_%7Bj%7D%3Dt_%7Bk%2Cj%7D
左子樹的 cost:若只單看左子樹,那成本就是 https://chart.googleapis.com/chart?cht=tx&chl=c_%7Bi%2Ck-1%7D,然而,實際狀況是多了一個 Root,因此每個節點 level 都會多 1,所以要加上該子樹所有點的權重,才會等於實際左子樹的 cost,也就是 https://chart.googleapis.com/chart?cht=tx&chl=cost%3Dc_%7Bi%2Ck-1%7D%2Bw_%7Bi%2Ck-1%7D
右子樹的 cost:若只單看右子樹,那成本就是 https://chart.googleapis.com/chart?cht=tx&chl=c_%7Bk%2Cj%7D ,然而,實際狀況是多了一個 Root,因此每個節點 level 都會多 1,所以要加上該子樹所有點的權重,才會等於實際右子樹的 cost,也就是https://chart.googleapis.com/chart?cht=tx&chl=c_%7Bk%2Cj%7D%2Bw_%7Bk%2Cj%7D
因此整顆樹的Cost可以看成,左子樹 cost、右子樹 cost、root cost 加起來的結果
https://chart.googleapis.com/chart?cht=tx&chl=c_%7Bi%2Cj%7D%3D1*p_%7Bk%7D%2Bc_%7Bi%2Ck-1%7D%2Bc_%7Bk%2Cj%7D%2Bw_%7Bi%2Ck-1%7D%2Bw_%7Bk%2Cj%7D
我們可以化簡一下,把式子簡化成https://chart.googleapis.com/chart?cht=tx&chl=c_%7Bi%2Cj%7D%3Dw_%7Bi%2Cj%7D%2Bc_%7Bi%2Ck-1%7D%2Bc_%7Bk%2Cj%7D,就是我們的cost Solution
接下來,我們只要精心挑選一個合適的 root k 就可以讓搜尋總成本降到最低囉
我們可以把式子看成這樣https://chart.googleapis.com/chart?cht=tx&chl=c_%7Bi%2Cj%7D%3Dw_%7Bi%2Cj%7D%2Bmin%5C%7Bc_%7Bi%2Ck-1%7D%2Bc_%7Bk%2Cj%7D%5C%7D


上一篇
資料結構 - 我好想懂阿!30 天系列 (22) - OBST (Optimal BST)
下一篇
資料結構 - 我好想懂阿!30 天系列 (24) - Leftist Heap
系列文
資料結構 - 我好想懂阿!30 天系列30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
pdes0722
iT邦新手 5 級 ‧ 2024-04-09 22:22:13

圖片連結好像壞掉了!

我要留言

立即登入留言